/**
 * 用户相关API接口
 */
import http from '../utils/http.js'
import { encryptPassword } from '../utils/crypto.js'

// API路径常量
const API_PATHS = {
  LOGIN: '/jsonrest/mobile/user/User/0/simpleLogin',
  SEND_CODE: '/jsonrest/mobile/user/User/0/sendCode',
  UPDATE_PASSWORD: '/jsonrest/mobile/user/User/0/updatePassword',
  REGISTER: '/jsonrest/mobile/user/User/0/register',
  EXIT_LOGIN: '/jsonrest/mobile/user/User/0/exitLogin',
  GET_USER_INFO: '/jsonrest/mobile/user/User/0/getUserInfo'
}

/**
 * 用户API类
 */
class UserApi {
  /**
   * 用户登录
   * @param {String} loginName 用户名
   * @param {String} password 密码（明文，会自动Base64加密）
   * @param {Number} appType 应用类型，默认4
   */
  static async login(loginName, password, appType = 4) {
    // 对密码进行Base64加密
    const encryptedPassword = encryptPassword(password)

    return await http.post(API_PATHS.LOGIN, {
      loginName,
      password: encryptedPassword,
      appType
    })
  }

  /**
   * 发送动态验证码
   * @param {String} loginName 用户名
   * @param {Number} appType 应用类型，默认4
   */
  static async sendCode(loginName, appType = 4) {
    return await http.post(API_PATHS.SEND_CODE, {
      loginName,
      appType
    })
  }

  /**
   * 修改密码
   * @param {String} password 旧密码（明文，会自动Base64加密）
   * @param {String} newPassword 新密码（明文，会自动Base64加密）
   */
  static async updatePassword(password, newPassword) {
    // 对密码进行Base64加密
    const encryptedOldPassword = encryptPassword(password)
    const encryptedNewPassword = encryptPassword(newPassword)

    return await http.post(API_PATHS.UPDATE_PASSWORD, {
      password: encryptedOldPassword,
      newPassword: encryptedNewPassword
    })
  }

  /**
   * 用户注册
   * @param {Object} userData 注册数据
   * @param {String} userData.username 用户名
   * @param {String} userData.password 密码（明文，会自动Base64加密）
   * @param {String} userData.inviteCode 邀请码
   */
  static async register(userData) {
    // 对密码进行Base64加密
    const encryptedData = {
      ...userData,
      password: encryptPassword(userData.password || ''),
      appType: 4
    }

    return await http.post(API_PATHS.REGISTER, encryptedData)
  }

  /**
   * 退出登录
   * 调用退出登录接口
   */
  static async exitLogin() {
    return await http.post(API_PATHS.EXIT_LOGIN, {})
  }

  /**
   * 获取用户信息
   */
  static async getUserInfo() {
    return await http.get(API_PATHS.GET_USER_INFO)
  }
}

// 导出API方法（支持两种导入方式）
export default UserApi

// 也支持解构导入
export const {
  login,
  sendCode,
  updatePassword,
  register,
  exitLogin,
  getUserInfo
} = UserApi

